package com.pick.admin.service;

import java.util.List;
import com.pick.admin.entity.SysMenu;

/**
 * 用户角色服务接口
 *
 * @author pick
 * @since 2024-01-01
 */
public interface SysUserRoleService {

    /**
     * 为用户分配角色
     *
     * @param userId  用户ID
     * @param roleIds 角色ID列表
     */
    void assignRoles(Long userId, List<Long> roleIds);

    /**
     * 移除用户角色
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     */
    void removeUserRole(Long userId, Long roleId);

    /**
     * 批量移除用户角色
     *
     * @param userId  用户ID
     * @param roleIds 角色ID列表
     */
    void removeUserRoles(Long userId, List<Long> roleIds);

    /**
     * 获取用户角色ID列表
     *
     * @param userId 用户ID
     * @return 角色ID列表
     */
    List<Long> getUserRoleIds(Long userId);

    /**
     * 获取用户权限ID列表
     *
     * @param userId 用户ID
     * @return 权限ID列表
     */
    List<Long> getUserPermissionIds(Long userId);

    /**
     * 为用户分配权限
     *
     * @param userId        用户ID
     * @param permissionIds 权限ID列表
     */
    void assignUserPermissions(Long userId, List<Long> permissionIds);

    /**
     * 检查用户是否拥有指定角色
     *
     * @param userId   用户ID
     * @param roleCode 角色代码
     * @return 是否拥有角色
     */
    boolean hasRole(Long userId, String roleCode);

    /**
     * 检查用户是否拥有指定权限
     *
     * @param userId         用户ID
     * @param permissionCode 权限代码
     * @return 是否拥有权限
     */
    boolean hasPermission(Long userId, String permissionCode);

    /**
     * 获取用户的权限代码列表
     */
    List<String> getUserPermissionCodes(Long userId);
    
    /**
     * 为用户分配菜单权限
     */
    boolean assignUserMenus(Long userId, List<Long> menuIds);
    
    /**
     * 获取用户的菜单列表
     */
    List<SysMenu> getUserMenus(Long userId);
    
    /**
     * 为角色分配菜单权限
     */
    boolean assignRoleMenus(Long roleId, List<Long> menuIds);
    
    /**
     * 获取角色的菜单列表
     */
    List<SysMenu> getRoleMenus(Long roleId);
}